//package com.tjetc.service.impl;
//
//import com.tjetc.util.JedisPoolUtil;
//import redis.clients.jedis.Jedis;
//import redis.clients.jedis.JedisPool;
//import redis.clients.jedis.Transaction;
//
//import java.util.List;
//import java.util.Objects;
//
//// 出现超卖现象
//public class SellTicketService2 {
//
//
//    /**
//     * 抢票
//     * @param ticketNo 去哪里的票
//     * @param userId 谁买的
//     * @return 是否购买成功
//     */
//    public boolean sellTicket(String ticketNo, String userId){
//        if (Objects.isNull(ticketNo) || Objects.isNull(userId)) {
//            return false;
//        }
//        // 1.连接redis
//        //Jedis jedis = new Jedis("192.168.38.129", 6379);
//        // 使用连接池创建jedis对象
//        JedisPool jedisPool = JedisPoolUtil.getJedisPoolInstance();
//        Jedis jedis = jedisPool.getResource();
//
//        // 2.构造redis库中的key 前缀_ticketNo_后缀：ticket  前缀_ticketNo_后缀：user
//        String ticketKey = "sk:" + ticketNo + ":ticket";
//        String userKey = "sk:" + ticketNo + ":user";
//
//        // 监控票的数量
//        jedis.watch(ticketKey);
//
//        // 3.获取票的数量
//        String ticketNum = jedis.get(ticketKey);
//
//        // 4.判断不能购买的情况
//        // 如果获取的为null 说明还没开始售卖
//        if (Objects.isNull(ticketNum)) {
//            System.out.println("还没有售卖");
//            jedis.close();
//            return false;
//        }
//
//        // 如果用户购买过了就不能抢票了
//        if (jedis.sismember(userKey, userId)) {
//            System.out.println("购买过，不能再次购买");
//            jedis.close();
//            return false;
//        }
//
//        // 判断票够不够
//        if (Integer.parseInt(ticketNum) <= 0) {
//            System.out.println("已售罄");
//            jedis.close();
//            return false;
//        }
//
//        // 4.开启事务
//        Transaction multi = jedis.multi();
//        // 5.组队购买指令
//        // 将数量-1
//        multi.decr(ticketKey);
//        // 记录当前购买的用户
//        multi.sadd(userKey, userId);
//
//       // 6.执行
//        List<Object> results = multi.exec();
//        if (Objects.isNull(results) || results.isEmpty()) {
//            System.out.println("购买失败");
//            jedis.close();
//            return false;
//        }
//
//
//        System.out.println("购买成功");
//        jedis.close();
//        return true;
//    }
//}
